#include <my_header.h>
// 使用**shmctl函数**可以用于对共享内存段执行多种操作。
// 根据参数的不同，可以执行不同的操作。 (man shmctl)
/* Usage: ./1_shmctl */
int main(int argc, char *argv[]){   
    // 1.生产标识
    key_t keytag = ftok("./1_shmctl", 100);
    ERROR_CHECK(keytag, -1, "ftok");
    printf("key_t :%d\n", keytag);

    //2. 创建共享内存 shmid:共享内存标识
    int shmid = shmget(keytag, 4096, 0666 | IPC_CREAT);
    ERROR_CHECK(shmid, -1, "shmid");
    printf("shmid :%d\n",shmid);

    // 3. 获取共享内存
    char *p = (char *)shmat(shmid, NULL, 0);
    ERROR_CHECK(p, NULL, "shmat");
   
    // 获取共享内存段信息
    struct shmid_ds stat;
    int ret = shmctl(shmid, IPC_STAT, &stat);
    ERROR_CHECK(ret, -1 ,"shmctl");

    // 用户组 权限 字节 连接数
    printf("cuid = %d perm = %o size = %ld nattch = %ld",
           stat.shm_perm.cuid, stat.shm_perm.mode,
           stat.shm_segsz, stat.shm_nattch);


    return 0;
}

#if 0
IPC_STAT可以用来获取存储共享内存段信息的数据结构；

#endif
